;;(load "ut.scm")
(defun 【*】+【*】(a b) (if (or (eq a '无穷大)(eq b '无穷大)) '无穷大 (if (eq a '无穷小) b (if (eq b '无穷小) a (+ a b)))))
(def/scm-rest + l)
(defun 【*】-【*】(a b) (- a b))
(def/scm-rest - l)
(defun 【*】*【*】(a b) (* a b))
(def/scm-rest * l)
(defun 【*】/【*】(a b) (/ a b))
(def/scm-rest / l)
(defun 【*】==【*】(a b) (if (and (numberp a)(numberp b)) (= a b) nil))
(defun 【*】>=【*】(a b) (if (and (numberp a)(numberp b)) (>= a b) nil))
(defun 【*】<=【*】(a b) (if (and (numberp a)(numberp b)) (<= a b) nil))
(defun 【*】>【*】(a b) (if (and (numberp a)(numberp b)) (> a b) nil))
(defun 【*】<【*】(a b) (if (and (numberp a)(numberp b)) (< a b) nil))

(defun 【*】而且【*】(a b) (and a b))
;;(defun (【*】而且【*】、\.\.\.  a  . b) (map and a b))
(def/rest 【*】而且【*】 a b)
(defun 【*】并且【*】(a b) (and a b))
(def/rest 【*】并且【*】 a b)
(defun 【*】同时【*】(a b) (and a b))
(def/rest 【*】同时【*】 a b)
(defun 【*】或者【*】(a b) (or a b))
(defun 【*】或者【*】、\.\.\.(a &optinal b) (let ((s (or a (car b)))) (tr-list (i e b 1) (setq s (or s e))) s))
(defun 【*】是【*】(a b) (eq a b))
(defun 【*】不是【*】(a b) (not (eq a b)))
(defmacro 【*】=【*】(a b)
  (if (atom? a)
     `(set! ,a ,b)
     `(let-set! ,a ,b)))
(defun 【*】(a) a)
(defun 宏终结语句() t)
(defun 显示【*】【*】、\.\.\.(fmt &rest v-l) (apply 'message fmt v-l))
(defun 显示【*】【*】(fmt v-l) (message fmt v-l))
(defun 显示【*】(str) (message str))
(defun 打印【*】(str) (message str))
(defun 显示新行() (message "\n"))
(defmacro 【*】直到【*】(body condi) `(cl-block exit-until (loop ,@body (if ,condi (cl-return-from exit-until)))))
(defun 规格化【*】【*】、\.\.\.(fmt &rest v-l) (apply 'format fmt v-l))
(defun 规格化【*】【*】(fmt  v-l) (format fmt v-l))
(defmacro 运行列表参数函数【*】【*】、\.\.\.(函数名 &rest 参数列表) `(apply '函数名 ,参数列表))
(defmacro 运行列表参数函数【*】【*】(函数名  参数列表) (apply '函数名 参数列表))
(defalias '运行列表参数函数 'apply)


;;these are system function or macro

(defvar 空 nil)
(defvar 真 t)
(defvar 假 nil)
(defvar 错误 'err)


;;these are system variable can be used in program

(defmacro 那么(首语句 &rest 后语句)
  (if (null 后语句)
      `(progn ,首语句)
      `(progn ,首语句 ,@后语句)))
(defmacro 否则(首语句 &rest 后语句)
  (if (null 后语句)
      `(progn ,首语句)
      `(progn ,首语句 ,@后语句)))
      
(defmacro 如果(条件 真语句 &rest 假语句)
  (if (null 假语句)
      `(if ,条件 ,真语句)
      `(if ,条件 ,真语句 ,@假语句)))
(defmacro 分类(&rest 语句)
  (if (null 语句)
      nil
      (let ((clause (car 语句)))
	(if (cdr clause)
	    `(if ,(car clause)
		 (progn ,@(cdr clause))
		 (分类 ,@(cdr 语句)))
	    `(or ,(car clause)
		 (分类 ,@(cdr 语句)))
	    ))))
(defmacro 并列语句(e &rest ee)
 `(progn e ,@ee))
(defmacro 执行(e &rest ee)
  `(progn e ,@ee))

(defmacro 循环(e &rest ee)
  `(cl-block 循环退出 e ,@ee))
	   

(defmacro 遍历(d-l op-l body)
  (let ((op (nth 0 op-l))
	(v-l (nth-cdr 1 op-l))
	)
    ;;(y-or-n "d-l=~a,op=~a,v-l=~a" d-l op v-l)
  `(travel ,d-l ',op ,v-l ,body)))
    
